Para uma melhor interpretação da Transformada de Fourier é importante entender intuitivamente a função senoidal. Muitos processos oscilatórios podem ser descritos por uma função periódica na forma de uma senoide: $$ f(x) = sin(\frac {2\pi}T.x + \varphi)$$
Esta é uma função contínua que cruza o eixo $x$ nos pontos $(k\pi,0)$ . Se pensarmos agora no domínio discreto, a função senoidal genérica é dada por: $$ f(x) = A.sin(\frac {2\pi}N.u.x + \varphi)$$
onde:
e ainda:
A função que vamos usar para gerar as ondas senoidas é a cos. Ela é capaz de gerar ondas cossenoidais 1D e 2D. Devemos lembrar que se desejarmos gerar uma senoide a partir da função que gera cossenoides, basta fazermos $$cos(x)=sin(x+\frac\pi2)$$
In [1]:
%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import sys,os
ia898path = os.path.abspath('../../')
if ia898path not in sys.path:
sys.path.append(ia898path)
import ia898.src as ia
A = 5
N = (100,1)
T = 50
T2 = 25
theta = np.pi/2
phi = np.pi/2
f = A*ia.cos(N, T, theta, 0)
f1 = A*ia.cos(N, T, theta, phi)
f2 = A*ia.cos(N, T2, theta, 0)
f3 = A*ia.cos(N, T2, theta, phi)
x = np.linspace(-np.pi,np.pi,100)
plt.figure(1, figsize=(12,2))
plt.subplot(1,4,1)
plt.title('T=50 e theta = 0')
plt.plot(x,f)
plt.subplot(1,4,2)
plt.title('T=50 e theta = 90')
plt.plot(x,f1)
plt.subplot(1,4,3)
plt.title('T = 25 e theta = 0')
plt.plot(x,f2)
plt.subplot(1,4,4)
plt.title('T = 25 e theta = 90')
plt.plot(x,f3)
Out[1]:
Imaginem agora que ao invés de uma senoide 1D nós temos uma senoide 2D, formando uma imagem. As equações no caso 2 D são: $$ f(r,c) = cos(2\pi(\frac 1T_r.r + \frac 1T_c.c) + \varphi)$$ ou ainda $$ f(r,c) = cos(2\pi(\frac vH.r + \frac uW.c) + \varphi)$$ onde $$T_r = \frac T{sin(\theta)}$$ e $$T_c = \frac T{cos(\theta)}$$ Além disso $$u = \frac W{T_c}$$ e $$v = \frac H{T_r}$$ onde:
Vamos considerar então uma onda cosenoidal 2D discreta de uma imagem com 256 colunas e 128 linhas, com comprimento de onda de 100 pixels a 45 graus. Neste caso, $T=100$, $H=128$ , $W=256$, $\theta = 45$ graus.
In [12]:
H = 128
W = 256
s = (H,W)
T = 100
theta = 45 * np.pi/180
f = ia.cos(s, T, theta, 0)
plt.imshow(f, cmap='gray')
Out[12]:
In [13]:
T_r = T/np.sin(theta)
T_c = T/np.cos(theta)
v = H/T_r
u = W/T_c
print('T_r:', T_r)
print('T_c:', T_c)
print('v:', v)
print('u:', u)